// 权限拦截在路由跳转  导航守卫

import router from '@/router'
import store from '@/store'
import nprogress from 'nprogress' // 引入进度条
import 'nprogress/nprogress.css' // 引入进度条样式

// 不需要导出 只需要代码倒霉执行即可

// 前置路由守卫
// to 去哪里 from 来自哪里
// next 守卫中必须执行的钩子

// next() 放行
// next(false) 执行终止
// next(地址) 跳转到某个地址 (常用)
const whitelist = ['/login', '/404'] // 定义一个白名单

router.beforeEach(async(to, from, next) => {
  // 开启进度条
  nprogress.start()
  if (store.getters.token) {
    // 有token情况下 进行判断是否去登陆页面
    if (to.path === '/login') {
    // 是去登陆页的情况 就跳转回首页 实现免登陆拦截
      next('/')
    } else {
      // 否者放行
      if (!store.getters.userid) {
        const { roles } = await store.dispatch('user/getUserInfo')
        const routes = await store.dispatch('permisson/filterRouters', roles.menus)
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
        next(to.path)
      } else {
        next()
      }
    }
  } else {
    // 没有token的情况 进行判断是否是 白名单的页面
    if (whitelist.indexOf(to.path) > -1) {
      next()
    } else {
      next('/login')
    }
    nprogress.done() // 关闭进度条
  }
})

// 导航后置守卫
router.afterEach((to, from, next) => {
  nprogress.done() // 关闭进度条
})
